package app.fichajes.data.parser;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import app.fichajes.cacheo.FichajesData;
import app.fichajes.constants.Constants;
import app.fichajes.data.Equipo;
import app.fichajes.data.Fichaje;
import app.fichajes.data.Jugador;

import com.gi.libraryutility.parser.BaseFeedParser;

public class FacadeFichajes extends BaseFeedParser{
	
	private Jugador jugador;
	private Fichaje fichaje;
	
	private String eq_origen;
	private String eq_destino;
	
	private List<Fichaje> listFichajesPortada;
	
	//Constructor
	public FacadeFichajes(String feedUrl) {
		super(feedUrl);
		listFichajesPortada = new ArrayList<Fichaje>();
	}

	
	//Metodos sobreescritos
	@Override
	protected void inicializeTag(XmlPullParser parser) throws XmlPullParserException, IOException {
		
		String valueTag = parser.getName();
		
		if(valueTag.equals(Constants.TAG_FICHAJE)){
			jugador = new Jugador();
		}
		else if(valueTag.equals(Constants.TAG_NOMBRE_JUGADOR)){
			jugador.setNombre(parser.nextText());
		}
		else if(valueTag.equals(Constants.TAG_POSICION)){
			jugador.setPosicion(parser.nextText());
		}
		else if(valueTag.equals(Constants.TAG_FOTO)){
			jugador.setFoto(parser.nextText());
		}
		else if(valueTag.equals(Constants.TAG_EQUIPO_ORIGEN)){
			eq_origen = parser.nextText();
		}
		else if(valueTag.equals(Constants.TAG_EQUIPO_DESTINO)){
			eq_destino = parser.nextText();
		}
	}
	
	@Override
	protected void finalizeTag(XmlPullParser parser) {
		
		String valueTag = parser.getName();
		
		if(valueTag.equals(Constants.TAG_FICHAJE)){
			fichaje = new Fichaje(eq_origen, eq_destino, jugador);
			
			Equipo origen = FichajesData.getMapEquiposBBVA().get(eq_origen);
			if(origen != null){
				origen.addFichajeListBajas(fichaje);
			}
			
			Equipo destino = FichajesData.getMapEquiposBBVA().get(eq_destino);
			if(destino != null){
				destino.addFichajeListAltas(fichaje);
			}
			
			//Se muestran los 6 últimos fichajes en portada
			if(listFichajesPortada.size() < 6){
				listFichajesPortada.add(fichaje);
			}
		}
	}
	
	
	@Override
	protected void endDocument(XmlPullParser parser) {}
	@Override
	protected void startDocument(XmlPullParser parser) {}
	@Override
	protected void text(XmlPullParser parser) {}
	
	
	//Métodos propios
	public List<Fichaje> getListaFichajesPortada(){
		return listFichajesPortada;
	}

}
